<!doctype html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../assert_selection.js"></script>
<script>
function editable(sample) {
  return `<div contenteditable>${sample}</div>`;
}

function testIt(styleWithCSS, command_name, command_value, input, expected,
                description) {
  selection_test(
      editable(input),
      selection => {
        selection.document.execCommand('styleWithCSS', false, styleWithCSS);
        selection.document.execCommand(command_name, false, command_value);
      },
      editable(expected),
      description);
}

function testStyleWithoutCSS(...params) {
  testIt(false, ...params);
}

function testStyleWithCSS(...params) {
  testIt(true, ...params);
}

// font size
testStyleWithoutCSS('fontSize', 3,
    '^<font size="3">abc <font size="4">xyz</font></font>|',
    '<font size="3">^abc xyz|</font>',
    'font-size-1');
testStyleWithoutCSS('fontSize', 4,
    '^<font face="Arial">abc</font>|',
    '<font face="Arial" size="4">^abc|</font>',
    'font-size-2');
testStyleWithoutCSS('fontSize', 4,
    '^<font color="blue"><font face="Arial">abc</font></font>|',
    '<font color="blue"><font face="Arial" size="4">^abc|</font></font>',
    'font-size-3');
testStyleWithoutCSS('fontSize', 4,
    '^<b><font face="Arial">abc</font></b>|',
    '<b><font face="Arial" size="4">^abc|</font></b>',
    'font-size-4');
testStyleWithoutCSS('fontSize', 4,
    '^<font face="Arial"><i>abc</i></font>|',
    '<font face="Arial" size="4"><i>^abc|</i></font>',
    'font-size-5');

// font name
testStyleWithoutCSS('fontName', 'Arial',
    '^<b><font face="Arial">abc</font></b> xyz|',
    '<font face="Arial"><b>^abc</b> xyz|</font>',
    'font-name-1');
testStyleWithoutCSS('fontName', 'Arial',
    '^<font color="blue">abc</font> xyz|',
    '<font face="Arial"><font color="blue">^abc</font> xyz|</font>',
    'font-name-2');
testStyleWithoutCSS('fontName', 'Arial',
    '^<b><u>abc</u> xyz</b>|',
    '<b><font face="Arial"><u>^abc</u> xyz|</font></b>',
    'font-name-3');

// font color
testStyleWithoutCSS("foreColor", 'blue',
    '^<font><u style="color:red;">abc</u></font>|',
    '<font color="#0000ff"><u style>^abc|</u></font>',
    'font-color-1');
testStyleWithoutCSS("foreColor", 'rgba(0,50,100,0.4)',
    '^<font><u style="color:red;">abc</u></font>|',
    '<font color="rgba(0, 50, 100, 0.4)"><u style>^abc|</u></font>',
    'font-color-2');

// bold
testStyleWithoutCSS("bold", null,
    '^<u><strike>abc</strike> <strike>xyz</strike></u>|',
    '<u><b><strike>^abc</strike> <strike>xyz|</strike></b></u>',
    'bold-1');
testStyleWithoutCSS("bold", null,
    '^<i>abc</i> <b>xyz</b>|',
    '<b><i>^abc</i> xyz|</b>',
    'bold-2');
testStyleWithoutCSS("bold", null,
    '^<strike><i><u>abc <b>xyz</b></u></i> wxy</strike>|',
    '<strike><b><i><u>^abc xyz</u></i> wxy|</b></strike>',
    'bold-3');
testStyleWithoutCSS("bold", null,
    '^<b contenteditable="false"><span style="font-weight: normal;">abc</span> xyz</b> wxy|',
    '^<b contenteditable="false"><span style="font-weight: normal;">abc</span> xyz</b><b> wxy|</b>',
    'bold-4');
testStyleWithoutCSS("bold", null,
    '^<i>abc</i> <b contenteditable="false">xyz</b>|',
    '<b><i>^abc</i> </b><b contenteditable="false">xyz</b>|',
    'bold-5');

// strike-through
testStyleWithoutCSS("strikeThrough", null,
    '^<i>abc</i> <b><strike>xyz</strike></b> wxy|',
    '<strike><i>^abc</i> <b>xyz</b> wxy|</strike>',
    'strike-through-1');
testStyleWithoutCSS("strikeThrough", null,
    '^<b><i>abc <strike>xyz</strike></i> wxy</b>|',
    '<b><strike><i>^abc xyz</i> wxy|</strike></b>',
    'strike-through-2');

// font size with CSS
testStyleWithCSS('fontSize', 4,
    '^<font face="Arial">abc</font>|',
    '<font face="Arial" style="font-size: large;">^abc|</font>',
    'font-size-with-css-1');
testStyleWithCSS('fontSize', 4,
    '^<font face="Arial"><b>abc</b></font>|',
    '<font face="Arial"><b style="font-size: large;">^abc|</b></font>',
    'font-size-with-css-2');
testStyleWithCSS('fontSize', 4,
    '^<i><b>abc</b></i>|',
    '<i><b style="font-size: large;">^abc|</b></i>',
    'font-size-with-css-3');
testStyleWithCSS('fontSize', 4,
    '^<i><b>abc</b> xyz</i>|',
    '<i style="font-size: large;"><b>^abc</b> xyz|</i>',
    'font-size-with-css-4');
testStyleWithCSS('fontSize', 4,
    '^<font color="blue"><b>abc</b></font>|',
    '<font color="blue"><b style="font-size: large;">^abc|</b></font>',
    'font-size-with-css-5');

// bold with CSS
testStyleWithCSS("bold", null,
    '^<span style="font-style: italic;">abc</span>|',
    '<span style="font-style: italic; font-weight: bold;">^abc|</span>',
    'bold-with-css-1');

// underline with CSS
testStyleWithCSS("underline", null,
    '^<span style="font-style: italic;"><b>abc</b></span>|',
    '<span style="font-style: italic; text-decoration-line: underline;"><b>^abc|</b></span>',
    'underline-with-css-1');
testStyleWithCSS("underline", null,
    '^<span style="color: blue;"><i><span style="font-size: large;"><b>abc</b> xyz</span></i></span>|',
    '<span style="color: blue;"><i><span style="font-size: large; text-decoration-line: underline;"><b>^abc</b> xyz|</span></i></span>',
    'underline-with-css-2');
</script>
